// ActionScript file
			
				import com.sodimac.util.commons.UploadPostHelper;
				import com.sodimac.v2s.view.components.ScreenFormat;
				import mx.rpc.events.FaultEvent;
				import mx.rpc.events.ResultEvent;

				import mx.events.DataGridEvent;
				import mx.events.ItemClickEvent;
				import mx.events.AdvancedDataGridEvent;
				import mx.events.CollectionEvent;
				import mx.events.CloseEvent;
				 
				import mx.controls.AdvancedDataGrid;
				import mx.controls.TextInput;
				import mx.controls.DateField;
				import mx.controls.NumericStepper;    
				import mx.controls.ButtonLabelPlacement;
				
				import mx.managers.PopUpManager;	
				import mx.collections.ArrayCollection;
				import mx.formatters.CurrencyFormatter;
				
				import com.sodimac.v2s.view.*;
				import com.sodimac.v2s.vo.InfoSfpVO;
				import com.sodimac.v2s.events.cargarInfoSfpEvent;
				import com.sodimac.v2s.events.cargarProductosEvent;
				import com.sodimac.v2s.events.grabarPedidoPaisEvent;
				import com.sodimac.v2s.view.components.ventana_RechazarPropuesta;				
				import com.sodimac.v2s.model.ComprasModelLocator;
				import com.sodimac.util.alerts.alert;
				import com.sodimac.util.commons.Resources;
				import com.sodimac.util.commons.EstadosBPM;
				import com.sodimac.util.commons.UtilString;
				import com.sodimac.util.commons.DataGridExport;
				

				/* datos de pantalla */        			
				[Bindable] public var infoSfpVo:InfoSfpVO = new InfoSfpVO();
				[Bindable] public var prodCorpData:ArrayCollection = new ArrayCollection();
				[Bindable] public var prodNacData:ArrayCollection = new ArrayCollection();
				[Bindable] public var reporteURL: String;
				[Bindable] public var uploadDataURL: String;
								
				[Bindable] public var codPais: String;
				[Bindable] public var nombrePais: String;
				[Bindable] public var usuarioId: String;
				[Bindable] public var pedidoCorpId: Number;
				[Bindable] public var empresaId: String;
				[Bindable] public var paises: XMLList;
				[Bindable] public var existePedido: String;	
				
				public var fired: Number = 0;
				public var poseeCantidades:Boolean = false;
				public var totalCompra: Number;
				public var numericStepperFac:ClassFactory;
				public var prodUpdated:ArrayCollection = new ArrayCollection();
				
				
				
				private function onCreationComplete():void
				{
					trace("____"+  this.name + " -->  onCreationComplete.");
				    
				    if (codPais == "CL") {
				    	imagePais.source =  Resources.banderaCL;
				    } else if (codPais == "CO")
				    {
				    	imagePais.source =  Resources.banderaCO;
				    } else if (codPais == "PE")
				    {
				    	imagePais.source =  Resources.banderaPE;
				    } else if (codPais == "AR")
				    {
				    	imagePais.source =  Resources.banderaAR;
				    }
				    
				    nombrePais = XML(paises).pais.(@codIata == codPais).@nombre; 	  
				    
				    
				     
				}  
				
				private function modificaTotalesNac(event:AdvancedDataGridEvent):void
				{
					var cantidad:Number =  prodNacData.getItemAt(event.rowIndex).quantity;
					
					prodNacData.getItemAt(event.rowIndex).sub_price = (cantidad==0)? "0": Number(cantidad * prodNacData.getItemAt(event.rowIndex).unit_price).toFixed(2);
					prodNacData.getItemAt(event.rowIndex).sub_kgs =   (cantidad==0)? "0": Number(cantidad * prodNacData.getItemAt(event.rowIndex).unit_kgs).toFixed(2);
					prodNacData.getItemAt(event.rowIndex).sub_cbm =   (cantidad==0)? "0": Number(cantidad * prodNacData.getItemAt(event.rowIndex).unit_cbm).toFixed(2);
				} 

				private function modificaTotalesCorp(event:AdvancedDataGridEvent):void
				{
					var cantidad:Number =  prodCorpData.getItemAt(event.rowIndex).quantity;

					prodCorpData.getItemAt(event.rowIndex).sub_price = (cantidad==0)? "0": Number(cantidad * prodCorpData.getItemAt(event.rowIndex).unit_price).toFixed(2);
					prodCorpData.getItemAt(event.rowIndex).sub_kgs =   (cantidad==0)? "0": Number(cantidad * prodCorpData.getItemAt(event.rowIndex).unit_kgs).toFixed(2);
					prodCorpData.getItemAt(event.rowIndex).sub_cbm =   (cantidad==0)? "0": Number(cantidad * prodCorpData.getItemAt(event.rowIndex).unit_cbm).toFixed(2);
				}

 	
				private function validaCantidad(event:AdvancedDataGridEvent):void
				{
					var resto:Number = 0;
					var newValor:Number = NumericStepper(event.currentTarget.itemEditorInstance).value;
					var oldValor:Number = event.currentTarget.editedItemRenderer.data[event.dataField]; 
					var casePack:Number = event.currentTarget.selectedItem.case_pack;

					if(oldValor != -1)
					{

						if ( (isNaN(casePack)) || (casePack ==0)) 
						{
							AdvancedDataGrid(event.currentTarget).destroyItemEditor();
							event.preventDefault();						
							alert.error("Case Pack no válido, no es posible validar cantidad ingresada.");
						} 
						else
						{
							var max:Number = NumericStepper(event.currentTarget.itemEditorInstance).maximum;
							if (newValor >= max)
							{
								AdvancedDataGrid(event.currentTarget).destroyItemEditor();
								event.preventDefault();	
								alert.warning("Valor ingresado es igual o superior al máximo permitido ("+  numberFmt.format(max) +").");
							}
							else
							{
							
								resto=newValor%casePack;
								if (resto !=0)
								{
									NumericStepper(event.currentTarget.itemEditorInstance).value = 	Math.ceil(newValor/casePack)*casePack;
									event.currentTarget.editedItemRenderer.data[event.dataField] = -1;			
									alert.warning("La cantidad ingresada debe ser múltiplo del case pack ("+ casePack + ").  Se propone una cantidad superior válida.");
								} 
	
							}	
						}
					}	

				}
				
					

				private function onCreationCompleteDGCorp():void
				{
					var i:int = 0;
					var col:AdvancedDataGridColumn;
					var cols:Array = dg_corp.columns;
					var anchoCols:Array = new Array(.05,.08,.17,.05,.07,.07,.07,.06,.08,.06,.08,.08,.08);
					
				 	trace("____"+  this.name + " -->  onCreationCompleteDGCorp.");
		    
					numericStepperFac = new ClassFactory(NumericStepper);
					numericStepperFac.properties = {minimum:0,  maximum:999999999, maxChars:9};

					while (i < cols.length)
					{
						//para todos
						col= cols[i];
						col.editable = false;
						col.headerWordWrap = true;
						col.width = Math.round(dg_corp.width*anchoCols[i]);
						
						if (i==6)
						{
							var sf_c6:ClassFactory = new ClassFactory(ScreenFormat);
							sf_c6.properties = {fieldName: col.dataField}
							col.itemRenderer = sf_c6; 
						}						
						//renderiza NumericStepper
						if (i==9)
						{
							col.editable = true;
							col.editorDataField = "value";
							col.itemEditor = numericStepperFac;
						} 
						if (i>=10)
						{
							var sf_c10:ClassFactory = new ClassFactory(ScreenFormat);
							sf_c10.properties = {fieldName:  col.dataField}
							col.itemRenderer = sf_c10; 
						}
						i++;
					}

				}


 				private function onCreationCompleteDGNac():void {
					var i:int = 0;
					var col:AdvancedDataGridColumn;
					var cols:Array = dg_nac.columns;
					var anchoCols:Array = new Array(.05,.08,.17,.05,.07,.07,.07,.06,.08,.06,.08,.08,.08);
					
					trace("____"+  this.name + " -->  onCreationCompleteDGNac.");
											
					numericStepperFac = new ClassFactory(NumericStepper);
					numericStepperFac.properties = {minimum:0,  maximum:999999999, maxChars:9};
					 
					while (i < cols.length)
					{
						//para todos
						col= cols[i];
						col.editable = false;
						col.headerWordWrap = true;
						col.width = Math.round(dg_nac.width*anchoCols[i]);

						if (i==6)
						{
							var sf_n6:ClassFactory = new ClassFactory(ScreenFormat);
							sf_n6.properties = {fieldName: col.dataField}
							col.itemRenderer = sf_n6; 
						}
						//renderiza NumericStepper
						if (i==9)
						{
							col.editable = true;
							col.editorDataField = "value";
							col.itemEditor = numericStepperFac;
						} 
						if (i>=10)
						{
							var sf_n10:ClassFactory = new ClassFactory(ScreenFormat);
							sf_n10.properties = {fieldName:  col.dataField}
							col.itemRenderer = sf_n10; 
						}
						i++;
					}

				}           
				public function textFunction(col:AdvancedDataGridColumn):String
				{
					var txt:String = "";
					if (col.headerText =="SKU")
					{
						txt="Total";
					}
					return txt;
				} 

				public function sumFunctionCorp(col:AdvancedDataGridColumn):String
				{
					var n:int =0; 
					var sum:Number = 0;
					if (prodCorpData != null)
					{
						n = prodCorpData.length;
						for (var i:int = 0; i < n; i++)
						{
							sum += Number(prodCorpData[i][col.dataField]);
						}
					}
					return  numberFmt.format((Number(sum*100)/100));
				}


				public function sumFunctionNac(col:AdvancedDataGridColumn):String 
				{
					var n:int = 0; 
					var sum:Number = 0;
					if (prodNacData != null)
					{
						n = prodNacData.length;
						for (var i:int = 0; i < n; i++)
						{
							sum += Number(prodNacData[i][col.dataField]);
						}
					}
					return numberFmt.format((Number(sum*100)/100));
				}


				
				


				//styleFunction="setColorStyle" (for ADG)
				public function setColorStyle(data:Object, col:AdvancedDataGridColumn):Object
				{
					if(data["quantity"] <= 0)
						return {color:0xFF0000};
					else    
						return {color:0x0000FF};

					return null;
				}


				private function getTotalCompraCorp():void
				{
					
					var total:Number = 0;
					if (prodCorpData)
					{
						for (var i:int = 0; i < prodCorpData.length; i++)
						{
							
							trace("precio: " + prodCorpData[i]["sub_price"]);
							total += Number(prodCorpData[i]["sub_price"]);
						}					 
					}
					totalCompra = total;
					
				}
				
				private function getProductosModificados():void
				{
					var newValor:Number = 0;
					var oriValor:Number = 0; 	
	
					//get productos corp updated
					if (prodCorpData)
					{
						for (var i:int = 0; i < prodCorpData.length; i++)
						{
							newValor = prodCorpData[i]["quantity"];
							oriValor = prodCorpData[i]["quantity_orig"];
							if ( (newValor != oriValor) )
							{
								var objProd:Object = new Object();
								objProd.sku = prodCorpData[i]["sku"];
					    		objProd.quantity = prodCorpData[i]["quantity"];
					    		prodUpdated.addItem(objProd);
							}								

	
						}
					}
					
					//get productos NAC updated
					newValor = 0;
					oriValor = 0; 					
					if (prodNacData)
					{
						for (var k:int = 0; k < prodNacData.length; k++)
						{
							newValor = prodNacData[k]["quantity"];
							oriValor = prodNacData[k]["quantity_orig"];
							if ( (newValor != oriValor) )
							{
								var objProd2:Object = new Object();
								objProd2.sku = prodNacData[k]["sku"];
					    		objProd2.quantity = prodNacData[k]["quantity"];
					    		prodUpdated.addItem(objProd2);
							}								
	
						}
					}						
					
						
				}						
				
				/*
				 *  Creado por RGA 2010-02-04 
				 *  Verificar que al menos un producto tenga cantidad mayor que cero, antes de enviar SFP 
				 */
				private function validaCantidadProductos():void
				{
					var newValor:Number = 0;
	
					//check productos corp
					if (prodCorpData)
					{
						for (var i:int = 0; i < prodCorpData.length; i++)
						{
							newValor = prodCorpData[i]["quantity"];
							if ( newValor > 0 )
							{
								poseeCantidades = true;
								break;
							}								
						}
					}
					
					//check productos NAC
					newValor = 0;
					if (prodNacData)
					{
						for (var k:int = 0; k < prodNacData.length; k++)
						{
							newValor = prodNacData[k]["quantity"];
							if (  newValor > 0  )
							{
								poseeCantidades = true;
								break;
							}								
	
						}
					}						
					
						
				}				

				private function onClickBtnEnviar():void
				{
					var savePedidoEvt:grabarPedidoPaisEvent = new grabarPedidoPaisEvent();
					var version:Number = new Number(infoSfpVo.version);
					
					poseeCantidades = false;
					validaCantidadProductos();
					
					//verifica condiciones para envío
					if (!poseeCantidades)
					{
						alert.warning('No es posible enviar la SFP, debido a que no se han ingresado cantidades a los productos.');
					} 
					else
					{

						//obtiene el total de las compras corporativas para BPM
						getTotalCompraCorp();
						
						//get productos modificados
						getProductosModificados();

						savePedidoEvt.idPais = codPais;
			 			savePedidoEvt.idPedidoCorp = pedidoCorpId;
						savePedidoEvt.lgUser = usuarioId;
						savePedidoEvt.version = ((version - Math.floor(version))>0)? Math.ceil(version) + ".0":(version+1) + ".0";
						savePedidoEvt.fechaPedido = infoSfpVo.fecha;
						savePedidoEvt.idProveedor = infoSfpVo.proveedorId;
						savePedidoEvt.idEmpresa = empresaId;
						savePedidoEvt.estado = EstadosBPM.ENVIO;
						savePedidoEvt.motivoRechazo = "";
						savePedidoEvt.productosArr = prodUpdated;  //listado de prod. modificados
						savePedidoEvt.totalCompra = totalCompra;
							
						savePedidoEvt.dispatch();
						btnEnviar.enabled = false;
				      	btnGuardar.enabled = false;						
		      			btnRechazar.enabled = false;
						
						//clear list
						prodUpdated = null;
					} 
		
				}


				private function onClickBtnGuardar():void
				{				

					var savePedidoEvt:grabarPedidoPaisEvent = new grabarPedidoPaisEvent();
					var version:Number = new Number(infoSfpVo.version);
					
					poseeCantidades = false;
					validaCantidadProductos();
					
					//verifica condiciones para envío
					if (!poseeCantidades)
					{
						alert.warning('No es posible guardar la SFP, debido a que no se han ingresado cantidades a los productos.');
					} 
					else
					{					
					
						//get productos modificados
						getProductosModificados();					
					
						version += Number(0.1);
						savePedidoEvt.idPais = codPais;
			 			savePedidoEvt.idPedidoCorp = pedidoCorpId;
						savePedidoEvt.lgUser = usuarioId;
						savePedidoEvt.version = version.toFixed(1);
						savePedidoEvt.fechaPedido = infoSfpVo.fecha;
						savePedidoEvt.idProveedor = infoSfpVo.proveedorId;
						savePedidoEvt.idEmpresa = empresaId;
						savePedidoEvt.estado = EstadosBPM.GUARDA;
						savePedidoEvt.motivoRechazo = "";
						savePedidoEvt.productosArr = prodUpdated;  //listado de prod. modificados
							
						savePedidoEvt.dispatch();
						btnGuardar.enabled = false;
				      	btnEnviar.enabled = false;
				      	btnRechazar.enabled = false;
						
						//clear list
						prodUpdated = null;
					} 					

				}	
				
				private function onClickBtnRechazar():void
				{
					
					var popup:ventana_RechazarPropuesta = PopUpManager.createPopUp(this, ventana_RechazarPropuesta, true) as ventana_RechazarPropuesta;
					popup.txtMotivo =  txtCausaRechazo;  
					PopUpManager.centerPopUp(popup);
					popup.addEventListener(Event.CLOSE, callEventoRechazoPedidoPais);
				}
				

				private function callEventoRechazoPedidoPais(e:Event):void
				{
					var savePedidoEvt:grabarPedidoPaisEvent = new grabarPedidoPaisEvent();
					
					//verifica condiciones para envío
					if (UtilString.isEmpty(txtCausaRechazo.text))
					{
						alert.warning('Debe ingresar un motivo de rechazo previamente.');
					} 
					else
					{
						savePedidoEvt.idPais = codPais;
			 			savePedidoEvt.idPedidoCorp = pedidoCorpId;
						savePedidoEvt.lgUser = usuarioId;
						savePedidoEvt.version = infoSfpVo.version;
						savePedidoEvt.fechaPedido = infoSfpVo.fecha;
						savePedidoEvt.idProveedor = infoSfpVo.proveedorId;
						savePedidoEvt.idEmpresa = empresaId;
						savePedidoEvt.estado = EstadosBPM.RECHAZO;
						savePedidoEvt.motivoRechazo = txtCausaRechazo.text;
						savePedidoEvt.productosArr = null;
							
						savePedidoEvt.dispatch();
						btnRechazar.enabled = false;
		      			btnEnviar.enabled = false;
		      			btnGuardar.enabled = false;						
					}					
					
				
				} 
				
				
		        private function generarReporte(formato:String):void 
		        {
		            var url:String;
		            var sourceCorp:String =""; 
		            var sourceNac:String = "";
	  				var csv:String;
	  				 
	                //send data		            
		            if (dg_corp) {
		            	sourceCorp = DataGridExport.exportCSV(dg_corp, "Corporativos");
		            }
		            if (dg_nac) {	
		            	sourceNac  = DataGridExport.exportCSV(dg_nac, "Compra Individual");
		            }	
					
					csv = sourceCorp + "|" + sourceNac;
					
					//send data for report
					UploadPostHelper.uploadDataReport( 'ig6.txt', uploadDataURL, csv);
					
				    //call report					
//					var variables:URLVariables = new URLVariables();
//					variables.pNumeroSFP = infoSfpVo.numeroSFP;
//					variables.pPais = nombrePais;
//					variables.pEstado = infoSfpVo.estado; 
//					variables.pFecha = infoSfpVo.fecha_formato;
//					variables.pProveedor = infoSfpVo.proveedorNombre + '  ( ' + infoSfpVo.proveedorId + ' )';
//					variables.pVersion = infoSfpVo.version;
//					variables.pIntMerchant = infoSfpVo.merchantNombre; 
//					variables.formato = formato;
//					variables.fileName ='ig6.txt';			            
					
		            var request:URLRequest = new URLRequest();
					request.url = reporteURL + "?formato="+ formato +
								"&fileName=ig6.txt"+
								"&pNumeroSFP="+ infoSfpVo.numeroSFP +
								"&pPais="+ nombrePais +
								"&pEstado="+ infoSfpVo.estado + 
								"&pFecha="+ infoSfpVo.fecha_formato +
								"&pProveedor="+ infoSfpVo.proveedorNombre + " ( " + infoSfpVo.proveedorId + " )" +
								"&pVersion="+ infoSfpVo.version +
								"&pIntMerchant="+ infoSfpVo.merchantNombre;
									
					request.method = URLRequestMethod.POST;
					//request.data = variables;
		            navigateToURL(request, '_blank');				    					
					
	           }
	           